#coding=utf-8
from numpy import *
import numpy as np
from content_recommender_core import config
class Course:
    dealdata=zeros(12,dtype=float)   # 处理过的数据
    def __init__(self,list=[]):
        self.number= list[0]                #编号
        self.name=list[1]                 #中文名
        self.english_name=list[2]         #英文名
        self.college=list[3]               #开课学院
        self.credit=list[4]                #学分
        self.total_class_hours=list[5]     #总学时
        self.theory_class_hours=list[6]     #理论学时
        self.experiment_period=list[7]     #试验学时
        self.computer_class_hours=list[8]   #上机学时
        self.practice_one=list[9]          #实践学时
        self.week_class_hours=list[10]       #周学时
        self.semester=list[11]             #开课学年学期


    def getData(self):
        '''
        :return: 输出一个结构化的数据列表
        '''
        return self.dealdata

    def changeDataweight(self, position, weight):
        self.dealdata[:, position] =self.dealdata[:, position] * weight

    def DealData(self,maxlist,minlist):
        '''
        :param maxlist: 最大值列表
        :param minlist: 最小值列表
        :return: 用最大值列表和最小值列表归一化后的数据
        '''
        data=np.array([self.number,self.college,self.credit,self.total_class_hours
                      ,self.theory_class_hours,self.experiment_period,self.computer_class_hours
                      ,self.practice_one,self.week_class_hours,self.semester])
        data=dealdate_college(data)
        data=map(float, data)
        data=normalization(data,maxlist,minlist)
        data = np.array([data])
        self.dealdata=data
        return data


def MaxMinNormalization(x, Max, Min):
    '''
     :param x: 归一化的元素
     :param Max: 归一化元素所在列的最大值
     :param Min: 归一化所在元素的最小值
     :return: 归一化后的元素的值
   '''
    x = (x - Min) / (Max - Min);
    return x


def normalization(data,maxlist,minlist):
    '''

    :param data: 归一化的列表
    :return: 归一化的新列表
    '''
    m = shape(data)[0]
    for i in range(m):
        data[i] = MaxMinNormalization(data[i], maxlist[i], minlist[i])
    return data

def dealdate_college(date):
    '''
    :param date: 初步处理好的字符串列表列表
    :return:深度处理好的字符串列表
    主要功能是处理开课学院的代码替换
    '''
    file_college=open(config.COLLEGE_DATA_FILE_PATH)
    daMat=file_college.readlines()
    file_college.close()
    daMat_deal=[]
    for iter_daMat in daMat:
        daMat_deal.append(iter_daMat.decode('utf-8').split(' '))#切分
    for x in range(len(daMat_deal)):
        daMat_deal[x][1]=daMat_deal[x][1][:-1]#删除最后\n字符
    for iter_deal in daMat_deal:#进行匹配
           if(date[1]==iter_deal[0]):
               date[1]=iter_deal[1]
    return date#返回匹配代码


